package 数组.练习;

import java.util.Scanner;

/**
 * 定义一个 PerformanceAnalysis 类
 * @author lanqiao
 */
public class PerformanceAnalysis{

    /**
     * 程序的入口
     * 调用上面的方法，完成功能
     */
    public static void main(String[] args) {
        start();
    }

    public static void start(){
        Scanner sc=new Scanner(System.in);
        double arr[]=null;//空 没有值
        printMsg("欢迎使用成绩管理系统");
        sys:while(true){
            printMenu();
            System.out.println("请选择操作：");
            int op=sc.nextInt();
            switch (op){
                case 1://录入学生成绩
                    arr=input();
                    break;
                case 2://求平均成绩
                    System.out.println("平均："+average(arr));//arr=null  arr.属性 arr.方法()
                    break;
                case 3://求及格人数
                    System.out.println("及格："+passNum(arr));
                    break;
                case 4://求优秀人数
                    System.out.println("优秀："+averageNum(arr,average(arr)));
                    break;
                case 5://最高分
                    System.out.println("最高："+findMax(arr));
                    break;
                case 6://最低分
                    System.out.println("最低："+findMin(arr));
                    break;
                case 7://及格率(及格人数/总人数)
                    System.out.println("及格率"+passRate(arr));
                    break;
                case 8://退出系统
                    printMsg("谢谢使用成绩管理系统");
                    break sys;//退出循环
            }
        }
    }

    public static void printMsg(String msg){
        System.out.println("****************************************************************************");
        System.out.println("                       "+msg);
        System.out.println("****************************************************************************");
    }

    public static void printMenu(){
        System.out.println("1.录入学生成绩\n" +
                "2.求平均成绩\n" +
                "3.求及格人数\n" +
                "4.求优秀人数\n" +
                "5.最高分\n" +
                "6.最低分\n" +
                "7.及格率(及格人数/总人数)\n" +
                "8.退出系统");
    }

    public static double passRate(double arr[]){
        return 1.0*passNum(arr)/arr.length;//表达式数据类型      int/int 4/5=0
    }

    /**
     * 控制台输入数组长度和数组元素，需要注意成绩可能不是整数，因此使用 double 类型的数组
     * @return 包含输入元素的数组
     */
    public static double[] input(){
        Scanner sc=new Scanner(System.in);
        System.out.println("长度：");
        int length=sc.nextInt();
        double arr[]=new double[length];
        //录入成绩
        for (int i = 0; i < arr.length; i++) {
            System.out.println("成绩：");
            arr[i]=sc.nextDouble();
        }
        return arr;
    }
    /**
     * 计算平均成绩
     * @param array 包含所有成绩的数组
     * @return 平均成绩
     */
    public static double average(double[] array){
        double sum=0;
        for (double v : array) {
            sum+=v;
        }
        return sum/array.length;
    }
    /**
     * 传入成绩数组和平均成绩，统计成绩大于平均成绩的人数
     * @param array 成绩数组
     * @param average 平均成绩
     * @return 大于平均成绩的人数
     */
    public static int averageNum(double[] array,double average){
        int count=0;
        for (double v : array) {
            if(v>average){
                count++;
            }
        }
        return count;
    }

    /**
     * 查找成绩数组中的最大值
     * @param array 成绩数组
     * @return 最大值
     */
    public static double findMax(double[] array){
        double max=array[0];
        for (double v : array) {
            if(v>max){
                max=v;
            }
        }
        return max;
    }

    /**
     * 查找成绩数组中的最小值
     * @param array 成绩数组
     * @return 最小值
     */
    public static double findMin(double[] array){
        double min=array[0];
        for (double v : array) {
            if(v<min){
                min=v;
            }
        }
        return min;
    }

    /**
     * 统计及格人数
     * @param array 成绩数组
     * @return 及格人数
     */
    public static int passNum(double[] array){
        int count=0;
        for (double v : array) {
            if(v>=60){
                count++;
            }
        }
        return count;
    }


}
